package com.yfp.group.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.github.binarywang.wxpay.bean.notify.WxPayPartnerNotifyV3Result;
import com.yfp.group.domain.Enterprise;
import com.yfp.group.domain.EnterpriseCapital;
import com.yfp.group.domain.dto.CapitalSettleDTO;
import com.yfp.group.domain.dto.CreateWxPayOrderDTO;
import com.yfp.group.domain.dto.EnterpriseCapitalDTO;
import com.yfp.group.domain.dto.EnterpriseCapitalQueryDTO;
import com.yfp.group.domain.vo.EnterpriseCapitalOrderVO;
import com.yfp.group.domain.vo.EnterpriseCapitalVO;

import java.util.HashMap;
import java.util.List;

/**
 * @author admin
 * @description 针对表【enterprise_user_capital(企业资金明细)】的数据库操作Service
 * @createDate 2024-08-10 09:45:44
 */
public interface EnterpriseCapitalService extends IService<EnterpriseCapital> {

    /**
     * 企业资金明细
     *
     * @param enterpriseCapitalDTO
     * @return
     */
    List<EnterpriseCapitalVO> enterpriseCapital(EnterpriseCapitalDTO enterpriseCapitalDTO);

    /**
     * h5-我的账号充值-确认支付
     *
     * @param capitalSettleDTO
     * @return 订单编号
     */
    HashMap<String, Object> createRechargeOrder(CapitalSettleDTO capitalSettleDTO);

    /**
     * h5-创建消费订单
     *
     * @param enterpriseCapital
     * @return 订单编号
     */
    void createConsumeOrder(EnterpriseCapital enterpriseCapital);

    /**
     * h5-我的账号充值-确认支付-调用微信支付接口
     *
     * @param capitalSettleDTO
     * @param orderSn          订单编号
     * @param enterprise
     * @return
     */
    Object orderPaymentWx(CapitalSettleDTO capitalSettleDTO, String orderSn, Enterprise enterprise);

    /**
     * h5-我的账号充值-确认支付-调用微信支付接口-回调
     *
     * @param result
     */
    void parseOrderNotifyResult(WxPayPartnerNotifyV3Result.DecryptNotifyResult result);

    /**
     * h5-商户订单号查询订单状态
     *
     * @param orderSn
     * @return
     */
    EnterpriseCapital getOrderStatus(String orderSn);

    /**
     * h5-我的账号-余额变动明细
     *
     * @param enterpriseCapitalQueryDTO
     * @return
     */
    List<EnterpriseCapitalOrderVO> orderList(EnterpriseCapitalQueryDTO enterpriseCapitalQueryDTO);

    /**
     * h5-我的账号-余额变动明细-根据订单编号更新订单状态
     *
     * @param enterpriseCapital
     */
    void updateByTransactionId(EnterpriseCapital enterpriseCapital);

    /**
     * 增加账户余额
     *
     * @param enterpriseCapital
     * @param result
     */
    void addBalance(EnterpriseCapital enterpriseCapital, WxPayPartnerNotifyV3Result.DecryptNotifyResult result);

    /**
     * 减少账户余额
     *
     * @param createWxPayOrderDTO
     */
    void subBalance(CreateWxPayOrderDTO createWxPayOrderDTO);
}
